package com.google.code.drift.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.code.drift.api.UserInfo;
import com.google.code.drift.utils.PreferencesProxy.PrefKey;

public class JsonParser {

	private UserInfo myInfo;

	public JsonParser(UserInfo userInfo) {
		this.myInfo = userInfo;
	}

	/**
	 * 解析更改位置时返回的json
	 * 
	 * @param jsonString
	 */
	public void parseChangeLocationJson(JSONObject json) {
		parseNearbyPerson(json.getJSONArray("person_list"));
	}

	/**
	 * 解析登录或注册时返回的json
	 * 
	 * @param jsonString
	 * @return
	 */
	public int parseLoginJson(String jsonString) {
		int result = CommonUtils.LOGIN_ERROR;
		JSONObject json = JSONObject.parseObject(jsonString);
		if ("nearby_person".equals(json.getString("type"))) {
			result = CommonUtils.LOGIN_SUCCESS;
			JSONObject jsonObject = json.getJSONObject("data");
			int id = jsonObject.getIntValue("id");
			if (myInfo.getUserId() == -1) {
				result = CommonUtils.REGISTER_SUCCESS;
				saveIdToPreference(id);
			}
			myInfo.setUserId(id);
			parseNearbyPerson(jsonObject.getJSONArray("person_list"));
		}
		return result;
	}

	/**
	 * 解析附近用户列表，并添加进我的附近人列表里
	 * 
	 * @param jsonArray
	 */
	public void parseNearbyPerson(JSONArray jsonArray) {
		if (jsonArray.size() != 0 || jsonArray != null) {
			myInfo.clearNearbyPersons();
			int size = jsonArray.size();
			JSONObject json = null;
			synchronized (myInfo) {
				for (int i = 0; i < size; i++) {
					json = jsonArray.getJSONObject(i);
					if (json.getString("nick") == null) {
						// 这个用户的信息有问题，可能服务器没取消其在线状态
						continue;
					}
					UserInfo item = setUserInfoFromJsonAndReturn(json.getIntValue("id"),
							json.getString("nick"), json.getIntValue("sex"),
							json.getIntValue("latitude"), json.getIntValue("longitude"), json.getIntValue("room_id"));
					myInfo.addNearbyPerson(item);
				}
			}
		}
	}

	/**
	 * 从一个附近用户的json中解析，并添加进我的附近人列表里
	 * 
	 * @param json
	 * @param myInfo
	 * @return user 返回这个被添加的用户
	 */
	public UserInfo parseOneNearbyPersonAndReturn(JSONObject json) {
		UserInfo user = setUserInfoFromJsonAndReturn(json.getIntValue("id"),
				json.getString("nick"), json.getIntValue("sex"),
				json.getIntValue("latitude"), json.getIntValue("longitude"), -1);
		myInfo.addNearbyPerson(user);
		return user;
	}

	private UserInfo setUserInfoFromJsonAndReturn(int userId, String nick,
			int sex, int latitude, int longitude, int roomId) {
		UserInfo user = new UserInfo();
		user.setUserId(userId);
		user.setNick(nick);
		user.setSex(sex);
		user.setLocation(latitude, longitude);
		return user;
	}
	
	/**
	 * 把获取到的唯一ID保存到手机上
	 * 
	 * @param app
	 */
	private void saveIdToPreference(int id) {
		PreferencesProxy.putInt(PrefKey.MY_ID, id);
	}

}
